package org.tong.interceptors;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.tong.log.LogUtils;

/**
 * Feign请求拦截器，拦截每一次对外发出的微服务调用
 * 此拦截器的作用是，若当前MDC上下文中存在TRACE_ID,则将此TRACE_ID放入Request header中,传递到后续的服务中。
 */
@Component
public class LogInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        if (!StringUtils.isEmpty(MDC.get(LogUtils.TRACE_ID))) {
            requestTemplate.header(LogUtils.TRACE_ID, MDC.get(LogUtils.TRACE_ID));
        }
    }
}
